#include <cstdio>
#include <cmath>

int prime[100001];
int prime_size;
bool prime_mark[100001];

void init_prime();

int main(int argc, char const *argv[]){
    init_prime();
    int n;
    while(scanf("%d", &n) != EOF){
        int ans_prime[30];
        int ans_size = 0;
        int ans_pow_num[30];
        for (int i = 0; i < prime_size; i++){
            if (n % prime[i] == 0){
                ans_prime[ans_size] = prime[i];
                ans_pow_num[ans_size] = 0;
                while(n % prime[i] == 0){
                    ans_pow_num[ans_size]++;
                    n /= prime[i];
                }
                ans_size++;
                if (n == 1)
                    break;
            }
        }
        if (n != 1) {
            ans_prime[ans_size] = n;
            ans_pow_num[ans_size++] = 1;
        }
        int result = 0;
        for (int i = 0; i < ans_size; i++)
            result += ans_pow_num[i];
        printf("%d\n", result);
    }
    return 0;
}

void init_prime(){
    prime_size = 0;
    for (int i = 0; i <= 100000; i++)
        prime_mark[i] = true;

    for (int i = 2; i <= 100000; i++){
        if (prime_mark[i] == false)
            continue;
        prime[prime_size++] = i;
        /*if (i >= 350)   //不加该判断的话会运行时错误，且阈值未必是350
        	continue;
        for (int j = i*i; j <= 100000; j += i) // start from i*i not 2*i
            prime_mark[j] = false;*/
        int bound = (int)sqrt(100000) + 1;
        if (i < bound){
            for (int j = i*i; j <= 100000; j += i)
                prime_mark[j] = false;
        }
    }
}
